<?php

	/**
	 * Redireciona para a pagina $pagina
	 * @param array $parametros
	 * @param string[optional] $tipo Pode assumir os valores interno[default] ou externo.
	 */
	function redireciona($parametros, $tipo='interno'){
		if($tipo == 'interno'){
			$pagina	=	escreveLink($parametros);
		}
		else{
			$pagina	=	$parametros;
		}
		header('Location: ' . $pagina);
	}  
	
	/**
	 * Escreve os links do site no padrao estabelecido.
	 * @return string
	 * @param array $parametros
	 */
	function escreveLink($parametros){
		$link	=	__LINK_PATH;
		if (!is_array($parametros)) {
			$parametros	=	explode('/', $parametros);
		}
		foreach($parametros as $parametro){
			if ($parametro != '') {
				$link 	.=	$parametro . '/';
			}
		}
		return $link;
	}
	
	function setaMensagem($strMensagem) {
		$strMensagem	=	str_replace('[b]', '<span class="negrito">', $strMensagem);
		$strMensagem	=	str_replace('[/b]', '</span>', $strMensagem);
		
		$strMensagem	=	str_replace('[i]', '<span class="italico">', $strMensagem);
		$strMensagem	=	str_replace('[/i]', '</span>', $strMensagem);
		
		return $strMensagem;
	}
	
	/**
	 * Retorna um array com todos os Estados Brasileiros.
	 * @return array
	 */
	function getEstados() {
        return array (	"AC",
                        "AL",
                        "AP",
                        "AM",
                        "BA",
                        "CE",
                        "DF",
                        "ES",
                        "GO",
                        "MA",
                        "MT",
                        "MS",
                        "MG",
                        "PA",
                        "PB",
                        "PR",
                        "PE",
                        "PI",
                        "RJ",
                        "RN",
                        "RS",
                        "RO",
                        "RR",
                        "SC",
                        "SP",
                        "SE",
                        "TO");
	}
	
	/**
	 * Retorna um array com todos os Niveis possiveis de curso.
	 * @return array
	 */
	function getNiveis() {
		return array("fundamental" => "Fundamental", "medio" => "Médio", "graduacao" => "Graduação", "posgraduacao" => "Pós-Graduação", "outro" => "Outro");
	}
	
	/**
	 * Retorna um array com todas as Titulacoes possiveis de professor.
	 * @return array
	 */
	function getTitulacoes() {
		return array("graduacao" => "Graduação", "especializacao" => "Especialização", "mestrado" => "Mestrado", "doutorado" => "Doutorado", "posdoutorado" => "Pós-Doutorado");
	}
	
	/**
	 * Verifica se o argumento $numero e um numero e se o tamanho do mesmo e '>=', '<=', ou '=='[default] a $tamanho. Se nenhum tamanho foi passado, essa verificacao nao e feita.
	 * @return bool
	 * @param int $numero
	 * @param int[optional] $tamanho
	 * @param string[optional] $comparacao Pode assumir os valores '='[default], '<=' ou '>='. 
	 */
	
	function validaNumero($numero, $tamanho=false, $comparacao='='){
		if ($tamanho){
			if ($comparacao	==	'<='){
				if(!(strlen($numero) <= $tamanho)){
					return false;
				}
			}
			else{
				if($comparacao	==	'>='){
					if(!(strlen($numero) >= $tamanho)){
						return false;
					}
				}
				else{
					if(!(strlen($numero) == $tamanho)){
						return false;
					}
				}
			}
		}
		if(is_numeric($numero) && $numero >= 0){
			return true;
		}
		else{
			return false;
		}
	}
	
	/**
	 * Verifica se uma data e valida
	 * @return bool
	 * @param int $dia
	 * @param int $mes
	 * @param int $ano
	 */
	function validaData($dia, $mes, $ano){
		if (validaAno($ano) && validaMes($mes) && validaDia($dia)){
			if ($mes == 2){
				if ($ano%100 == 0){
					$ano = $ano/100;
				}
				if ($ano%4 == 0){
					if ($dia <= 29){
						return true;
					}
					else{
						return false;
					}
				}
				else{
					if ($dia <= 28){
						return true;
					}
					else{
						return false;
					}
				}
				
			}
			elseif($mes == 1 || $mes == 3 || $mes == 5 || $mes == 7 || $mes == 8 || $mes == 10 || $mes == 12 ){
					return true;
			}
			else{
				if ($dia <= 30){
					return true;
				}
				else{
					return false;
				}
			}
		}
		else{
			return false;
		}
	}
	
	/**
	 * Valida uma data em formato String.
	 * @return bool
	 * @param string $data
	 */
	function validaDataString($data) {
		$data	=	explode('-', $data);
		if (sizeof($data) != 3) {
			return false;
		}
		return validaData($data[2], $data[1], $data[0]);
	}
	
	/**
	 * Verifica se o ano é um número entre 1900 e 2100.
	 * @return bool
	 * @param int $ano
	 */
	function validaAno($ano) {
		if(validaNumero($ano, 4)){
			if ($ano >= 1900 && $ano <= 2100){
				return true;
			}
			else{
				return false;
			}
		}
		else{
			return false;
		}
		
	}
	/**
	 * Verifica se o mes é um número entre 1 e 12
	 * @return bool
	 * @param int $mes
	 */
	function validaMes($mes) {
		if (validaNumero($mes, 2, '<=')){
			if ($mes >= 1 && $mes <= 12){
				return true;
			}
			else{
				return false;
			}
		}
		else{
			return false;
		}
		
	}
	/**
	 * Verifica se o dia e um numero entre 1 e 31.
	 * @return bool
	 * @param int $dia
	 */
	function validaDia($dia) {
		if (validaNumero($dia, 2, '<=')){
			if ($dia >=1 && $dia <=31){
				return true;
			}
			else{
				return false;
			}
		}
		else{
			return false;
		}
		
	}
	
	/**
     * Verifica se uma determinada string possui SOMENTE valores alfabeticos (de a a z e de A a Z) ou espacos e se seu tamanho e menor ou igual ao limite passado. Se nenhum limite for passado, nao verifica o tamanho da string.
     * @return bool
     * @param string $string String que sera avaliada.
     * @param int $limite[optional] Tamanho limite da string.
     */
    function validaAlfabetico($string, $limite=false) {
       
        /*
         * Expressao regular de valores alfabeticos.
         */
        $listaValores    =    "/^[a-zA-ZáàãâéèêíìîóòôõúùûüçÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÇ]+[a-zA-Z áàãâéèêíìîóòôõúùûüçÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÇ]*$/";
       
        if (!$limite) {
            if (preg_match($listaValores, $string)) {
                return    true;
            }
            else {
                return    false;
            }
        }
        else {
            if (strlen($string) <= $limite) {
                if (preg_match($listaValores, $string)) {
                    return    true;
                }
                else {
                    return    false;
                }
            }
            else {
                return    false;
            }
        }
    }
   
    /**
     * Verifica se uma determinada string possui valores alfanumericos (de a a z e de A a Z e numeros) ou espacos, virgulas, pontos, dois pontos, tracos, parenteses, interrogacoes, exclamacoes ou underscores e se seu tamanho e menor ou igual ao limite passado. Se nenhum limite for passado, nao verifica o tamanho da string.
     * @return bool
     * @param string $string String que sera avaliada.
     * @param int $limite[optional] Tamanho limite da string.
     */
    function validaAlfaNumerico($string, $limite=false) {
       
        /*
         * Expressao regular de valores alfa-numericos.
         */
        $listaValores    =    "/^[a-zA-Z áàãâéèêíìîóòôõúùûüçÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÇ\d\,\.\:\-\(\)\?\!_\/\r\n]+$/";
       
        if (!$limite) {
            if (preg_match($listaValores, $string)) {
                return    true;
            }
            else {
                return    false;
            }
        }
        else {
            if (strlen($string) <= $limite) {
                if (preg_match($listaValores, $string)) {
                    return    true;
                }
                else {
                    return    false;
                }
            }
            else {
                return    false;;
            }
        }
	}
	
	
	/**
	 * Verifica se o e-mail é da forma email@email[.com]*
	 * @return bool
	 * @param string $email
	 */
	function validaEmail($email) {
		$listaValores	=	'/^[a-zA-Z1-9_\-\.]{3,}@[a-zA-Z1-9_\-]+(\.[a-zA-Z1-9_\-]+)+$/';
		if (strlen($email)	<=	__TAM_EMAIL_USUARIO__){
			return preg_match($listaValores, $email);
		}
		else{
			return false;
		}
		
	}
	
	/**
	 * Verififica se o nome do arquivo da foto e valido e se a extensao dos arquivos de foto e jpg, jpeg, gif, png ou bmp.
	 * @return bool
	 * @param string $nomeArquivo
	 */
	function validaFoto($nomeArquivo){
		$listaValores    =    "/^[a-zA-ZáàãâéèêíìîóòôõúùûüçÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÇ\d\.\-_ ]+\.(jpg|jpeg|gif|png|bmp|JPG|JPEG|GIF|PNG|BMP)$/";
		
		return preg_match($listaValores, $nomeArquivo);
	}
	
	/**
	 * Verifica se a Senha não contem nenhum aspas(") ou plique(') e se tem pelo menos 4 caracteres.
	 * @return bool
	 * @param string $senha
	 */
	function validaSenha($senha){
		$listaValores	=	"/^[^\"']{4,}$/";

		if(strlen($senha) <= __TAM_SENHA_USUARIO__){
			return preg_match($listaValores, $senha);
		}
		else{
			return false;
		}
	}
	
	function nomeSobrenome ($nomeCompleto) {
		$nomeCompletoVetor	=	explode(' ', $nomeCompleto);
		$ultimoNome			=	end($nomeCompletoVetor);	
		$primeiroNome		=	$nomeCompletoVetor[0];
		$nomeExibicao		=	'';
		
		if ($primeiroNome != $ultimoNome) {
			$nomeExibicao 	=	$primeiroNome . ' ' . $ultimoNome;
		}
		else {
			$nomeExibicao 	=	$primeiroNome;
		}
		
		if (strlen($nomeExibicao) > 150) {
			$nomeExibicao 	=	substr($nomeExibicao, 0, 146) . "...";
		}
		return $nomeExibicao;
	}
	
	/**
	 * Retorna uma saudacao para ser exibida no cabecalho.
	 * @return string
	 * @param Usuario $usuario
	 */
	function escreveSaudacao($usuario){
		
		$hora	=	date('H');
		
		if ($hora	>=	4	&&	$hora	<	12){
			$saudacao1	=	'Bom Dia, ';
		}
		else{
			if ($hora	>=	12	&&	$hora	<	18){
				$saudacao1	=	'Boa tarde, ';
			}
			else{
				if (($hora	>=	18	&&	$hora	<=	23) || ($hora	>=	0	&&	$hora	<	4)){
					$saudacao1	=	'Boa noite, ';
				}
			}
		}
		
		if ($usuario	!=	null){
			$nomeUsuario	=	nomeSobrenome($usuario->getNome());
			$saudacao1		.=	$nomeUsuario . '.';
			$saudacao2 		=	'Último login: ' . date('d/m/Y', strtotime($usuario->getUltimoAcesso())) . ' às ' . date('H:i:s', strtotime($usuario->getUltimoAcesso())) . '.';
		}
		else{
			$saudacao1	.=	'Visitante.';
			$saudacao2	=	'Seja bem vindo à Constructore.';
		}
		
		return array($saudacao1, $saudacao2);
		
	}
	
	
	/**
     * Compara duas datas, retorna 1 se a segunda for maior, -1 se for menor e 0 se forem iguais.
     * @return int
     * @param int $dia1
     * @param int $mes1
     * @param int $ano1
     * @param int $dia2
     * @param int $mes2
     * @param int $ano2
     */
    function comparaDatas($dia1, $mes1, $ano1, $dia2, $mes2, $ano2) {
        if ($ano2 > $ano1) {
            return 1;
        }
        if ($ano2 < $ano1) {
            return -1;
        }
        else {
            if ($mes2 > $mes1) {
                return 1;
            }
            if ($mes2 < $mes1) {
                return -1;
            }
            else {
                if ($dia2 > $dia1) {
                    return 1;
                }
                if ($dia2 < $dia1) {
                    return -1;
                }
                else {
                    return 0;
                }
            }
        }
    }
	
	/**
     * Compara duas datas, retorna 1 se a segunda for maior, -1 se for menor e 0 se forem iguais.
     * @return int
     * @param string $data1
     * @param string $data2
     */
	
	function comparaDatasString($data1, $data2){
		$data1 		=	explode('-', $data1);
		$data2 		=	explode('-', $data2);
		return comparaDatas($data1[2], $data1[1], $data1[0], $data2[2], $data2[1], $data2[0]);
	}
	
	/**
	 * 
	 * @return 
	 * @param object $string
	 */
	function codificaString($string){
		$string	=	ereg_replace('á|à|â|ä|ã|A|Á|À|Â|Ä|Ã', 'a', $string);
		$string	=	ereg_replace('é|è|ê|ë|ẽ|E|É|È|Ê|Ë|Ẽ', 'e', $string);
		$string	=	ereg_replace('í|ì|î|ï|ĩ|I|Í|Ì|Î|Ï|Ĩ', 'i', $string);
		$string	=	ereg_replace('ó|ò|ô|ö|õ|O|Ó|Ò|Ô|Ö|Õ', 'o', $string);
		$string	=	ereg_replace('ú|ù|û|ü|ũ|U|Ú|Ù|Û|Ü|Ũ', 'u', $string);
		$string	=	ereg_replace('ç|Ç', 'c', $string);
		$string	=	ereg_replace('[ ]', '-', $string);
		$string =	strtolower($string);
		$string =	preg_replace('/[^a-z0-9]/', '-', $string);
		$string =	preg_replace('/[\-]{2,}/', '-', $string);
		$string	=	preg_replace('/[^a-z0-9]$/', '', $string);
		$string	=	preg_replace('/^[^a-z0-9]/', '', $string);
		
		return $string;
	}
	
	
	/**
	 * 
	 * @return 
	 * @param object $string
	 */
	function decodificaString($string) {
		$string =	strtolower($string);
		$string =	preg_replace('/[^a-z0-9]/', '-', $string);
		$string	=	ereg_replace('a', '(á|à|â|ä|ã|A|Á|À|Â|Ä|Ã)', $string);
		$string	=	ereg_replace('e', '(é|è|ê|ë|ẽ|E|É|È|Ê|Ë|Ẽ)', $string);
		$string	=	ereg_replace('i', '(í|ì|î|ï|ĩ|I|Í|Ì|Î|Ï|Ĩ)', $string);
		$string	=	ereg_replace('o', '(ó|ò|ô|ö|õ|O|Ó|Ò|Ô|Ö|Õ)', $string);
		$string	=	ereg_replace('u', '(ú|ù|û|ü|ũ|U|Ú|Ù|Û|Ü|Ũ)', $string);
		$string	=	ereg_replace('c', '(c|ç|C|Ç)', $string);
		$string =	preg_replace('/[\-]{2,}/', '-', $string);
		$string	=	preg_replace('/[^a-z0-9\)]$/', '', $string);
		
		return	$string;
	}
	
	function getBrowser()
	{
		$var = $_SERVER['HTTP_USER_AGENT'];
		$info['browser'] = "OTHER";
        
		// valid brosers array
		$browser = array ("MSIE", "OPERA", "FIREFOX", "MOZILLA",
		                  "NETSCAPE", "SAFARI", "LYNX", "KONQUEROR");
		
		// bots = ignore
		$bots = array('GOOGLEBOT', 'MSNBOT', 'SLURP');
		
		foreach ($bots as $bot)
		{
		    // if bot, returns OTHER
		    if (strpos(strtoupper($var), $bot) !== FALSE)
		    {
		        return $info;
		    }
		}
        
		// loop the valid browsers
		foreach ($browser as $parent)
		{
		    $s = strpos(strtoupper($var), $parent);
		    $f = $s + strlen($parent);
		    $version = substr($var, $f, 5);
		    $version = preg_replace('/[^0-9,.]/','',$version);
		    if (strpos(strtoupper($var), $parent) !== FALSE)
		    {
		        $info['browser'] = $parent;
		        $info['version'] = $version;
		        return $info;
		    }
		}
		return $info;
    }
	
	function calculaSemestres(){
		$anoAtual		=	intval(date('Y', time()));
		$numSemestres	=	(($anoAtual 	-	__ANO_CRIACAO_CONTRUCTORE__) + 1) * 2;
		$mesAtual		=	intval(date('m', time()));
		$diaAtual		=	intval(date('d', time()));
		if ($mesAtual < 7){
			$numSemestres--;
		}
		if($mesAtual == 7 && $diaAtual <= 15){
			$numSemestres--;
		}
		
		$semestres	=	array();
		for($i = 1; $i <= $numSemestres; $i++){
			$anosPassados 	=	ceil(($i)/2) - 1;
			$ano			=	__ANO_CRIACAO_CONTRUCTORE__ + $anosPassados;
			if($i % 2 == 0){
				$periodo 	=	2;
			}
			else{
				$periodo 	=	1;
			}
			$semestre 	=	$ano . '/' . $periodo;
			array_push($semestres, $semestre);
		}
		if($periodo == 1){
			$periodo	=	2;
		}
		else{
			$periodo 	=	1;
			$ano++;
		}
		$semestre	=	$ano . '/' . $periodo;
		array_push($semestres, $semestre);
		return $semestres;
	}
?>